# 基于data_csv.csv数据，建立线性回归模型，预测x=3.5对应y的值，评估模型表现
import matplotlib
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn.metrics import mean_squared_error,r2_score

# 解决版本不兼容问题（或者 pip install matplotlib==3.9）
matplotlib.use("TkAgg")  # 或者Qt5Agg
# print(matplotlib.get_backend())

# load the data
data = pd.read_csv("data_csv.csv")

# 查看数据内容
content = data.head()
# print(content)
# print(type(data), data.shape)

# data赋值 冒号: 表示选择所有行  "x": 表示选择列名为 "x" 的这一列数据
x = data.loc[:, "x"]
y = data.loc[:, "y"]
# print(x, y)

# visualize the data (matplotlib)
plt.figure(figsize=(10, 6))
# 散点图
plt.scatter(x, y)
plt.show()

# set up a linear regression model(建立线性回归模型)
lr_model = LinearRegression()
# 将x转换为二维数组
x = np.array(x).reshape(-1, 1)
y = np.array(y).reshape(-1, 1)

lr_model.fit(x, y)

# 预测y的模型系数
y_predict = lr_model.predict(x)
# 预测x=3.5对应的y的值
y_predict_3_5 = lr_model.predict([[3.5]])
print("y_predict_3_5:", y_predict_3_5)


# 拟合出的a、b的值 （线性函数：y = ax + b）
a = lr_model.coef_
b = lr_model.intercept_
print("a:", a, "b:", b)

# 求均方差与R平方(MSE越小越好，R2越接近1越好)
MSE = mean_squared_error(y, y_predict)
R2 = r2_score(y, y_predict)
print("MSE:", MSE, "R2:", R2)

plt.figure()
plt.scatter(y, y_predict)
plt.show()

